Delegados en C#
Para comenzar la explicación debemos comprender qué es un delegado. Podemos ver un delegado en C# como un tipo de dato que apunta a un método permitiéndonos así extender las capacidades de nuestro código o permitir que otros lo hagan. La forma de declarar un delegado es de la siguiente manera: <modificador de acceso> delegate <tipo de retorno> <nombre del delegado> (<lista de parámetros>)
. Podríamos, por ejemplo, tener un delegado que realice una operación con dos números enteros y devuelva un solo número entero. La defnición de este sería algo como:
En ella, identificamos las partes:
- public, el modificador de acceso
- delegate la palabra clave para indicar que se trata de un delegado
- int, el tipo de retorno
- Operacion, el nombre del delegado
- int a e int b, los parámetros de entrada
Instanciación
Ahora la parte interesante, porque seguramente te preguntas: ¿cómo instancío un delegado? y ¿cómo defino el comportamiento de un delegado? Como mencioné arriba, el delegado es en cierta manera un apuntador a un método, luego entonces supongamos que tenemos varios métodos que comparten el mismo tipo de retorno y lista de parámetros que nuestro delegado. Para el ejemplo, tomemos los siguientes métodos:
Podemos ver que no importa el nombre del método ni de el de los parámetros que recibe. A partir de ellos se puede instanciar los delegados, para ello debemos utilizar el operador new
seguido del nombre de nuestro delegado y como parámetro el método al que este “apunta”. Para muestra:
Ejecución
Para ejecutarlo basta con llamarlo como habitualmente llamaríamos al método al que hace referencia, es decir, el nombre asignado a la “variable” del tipo delegado y entre paréntesis la lista de parámetros, para este ejemplo los usaríamos de esta manera:
Combinación
Otra función útil de los delegados es la posiblidad de combinarlos, lo cual se realiza mediante el operador +=
. Es confuso decir combinarlos, dado que la combinación es en realidad un tipo de encolamiento, haciéndo que se ejecute uno tras de otro, pero de manera independiente.
De ejecutarse el código anterior, en la consola se vería el texto: “Ejecutando Suma” seguido de “Ejecutando Multiplicacion” ya que ambos se ejecutan y el valor de r4
es 20
porque siempre se respeta el valor devuelto por el último delegado ejecutado.
Pasos siguientes
C# nos otorga plantillas para crear delegados con una serie personalizable de parámetros de entrada y de salida, a estos se les conoce como Func
y Action
, pero de ellos les hablaré en el siguiente post. Recuerda que el código de este post está disponible para que lo descargues, lo edites y juegues con él, búscalo en la información del post